#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <errno.h>
#include <sys/ipc.h>
#include <sys/msg.h>

#define N 10

typedef struct student
{
        int sno;
        char sname[15];
}STU;

typedef struct msgbuf
{
        long mtype;
        STU stu[N];
}MSGBUF;

int main(int argc, char* argv[])
{
    int i = 0;
    MSGBUF mbf = {0};
    mbf.mtype = 1;
    int MSQID ;
    errno = 0;
    char *name = "./msgaaa";
    
    key_t key = ftok(name,0);
    MSQID = msgget(key, IPC_CREAT|0666);


    while(i < N)
    {
        mbf.stu[i].sno = i;
        //strcpy(mbf.stu[i].sname, "hello");
        sprintf(mbf.stu[i].sname,"[%d]_msg_test",i);

        /*
        if (i == 0)
        {
            memset(mbf.stu[i].sname, 0, strlen(mbf.stu[i].sname));
            strcpy(mbf.stu[i].sname, "start");
        }


        if (i == N-1)
        {
            memset(mbf.stu[i].sname, 0, strlen(mbf.stu[i].sname));
            strcpy(mbf.stu[i].sname, "end");
        }

        */
        msgsnd(MSQID, &mbf.stu[i], sizeof(mbf.stu[i].sname), 0);
        
        if (-1 == errno)
        {
            perror("msgsnd");
            exit(-1);
        }
        
        printf(" %d -- %s\n", mbf.stu[i].sno, mbf.stu[i].sname);
        i++;
        usleep(1000*1000);
    }//while
    
    msgctl(MSQID, IPC_RMID, NULL);
}





